#include <sys/wait.h>
#include <stdio.h>
#include <unistd.h>
#include <stdlib.h>
#include <string.h>
#include <errno.h>

int main()
{
	pid_t pid;
	pid = fork();
	if(pid < 0)
	{
		printf("%s fork error\n",__FUNCTION__);
		return 1;
	} 
	else if( pid == 0 )
	{	//child
		printf("child is run, pid is : %d\n",getpid());
		sleep(5);
		exit(257);
	} 
	else
	{
		int status = 0;
		pid_t ret = waitpid(-1, &status, 0);//阻塞式等待，等待5s
		printf("this is test for wait\n");

		if( WIFEXITED(status) && ret == pid )
		{
			printf("wait child 5s success, child return code is:%d.\n",WEXITSTATUS(status));
		}
		else
		{
			printf("wait child failed, return.\n");
			return 1;
		}
	} 
	return 0;
}


//int main()
//{
//	pid_t pid;
//	if((pid=fork()) == -1)
//	{
//		perror("fail fork()");
//		exit(1);
//	}
//
//	if(pid == 0)
//	{
//		sleep(20);
//		exit(10);
//	}
//	else
//	{
//		int st;
//		int ret = wait(&st);
//
//		if(ret > 0 && (st & 0X7F) == 0)
//		{
//			//正常退出
//			printf("child exit code: %d\n",(st>>8)&0XFF);
//		}
//		else if (ret > 0)
//		{
//			//异常退出
//			printf("sig code : %d\n", st&0X7F);
//		}
//	}
//
//	return 0;
//}

// fork()函数
//int main()
//{
//
//	pid_t pid;
//	printf("Before: pid is %d\n", getpid());
//	if ( (pid=fork()) == -1 )
//	{
//		perror("fork()");
//		exit(1);
//	}
//
//	printf("After:pid is %d, fork return %d\n", getpid(), pid);
//	sleep(1);
//	
//	return 0;
//}
